class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        int n=matrix.size(),m=matrix[0].size();
        int res=0;
        if(!m || !n) return 0;
        vector<vector<int>> dp(n+1,vector<int>(m+1));
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(matrix[i][j]=='1')
                {
                    if(i==0 || j==0) dp[i][j]=1;
                    else
                    {
                        dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
                    }
                    res=max(res,dp[i][j]);
                }
            }
        }
        return res*res;
    }
};
